前一篇我們有針對Attention Mechanism(注意力機制)
做了探討,那今天一樣會繼續討論Attention這個題目繼續討論與分享,其實再後來也有更多學者針對Attention
做了很多延伸的議題,而今天要針對以下兩篇的論文再來更進一步地去分享Attention Model
的後續發展,分別如下:
- Effective Approaches to Attention-based Neural Machine Translation
- An Attentive Survey of Attention Models
一、Effective Approaches to Attention-based Neural Machine Translation
這篇paper是基於NMT(Neural Machine Translation)的議題去延伸探討Attention model
,作者們其中將attention拆分成Global Attention
、Local Attention
兩種,初步簡單的區分如下:
Global Attention: 每次在計算Attention的時候,會考量『全部』source sequence 的hidden-state
Local Attention: 在每個時間點只會考量『局部』的 source sequence之hidden-state
Neural Machine Translation, NMT
機器翻譯其實一直以來就是個很典型的議題,如果以整體的角度去思考,他其實也是個條件機率的議題,在給定source word(x)的條件下,去預測出target word(y)的機率,公式如下:
如果套用到Seq2Seq
的model,Encoder
會將source sequence轉換成fixed context vector,Decoder
再從中解碼生成。此時條件機率就可以轉換如下:
𝑠 為 Encoder
的source sequence 所求出的context vector(作者是寫representation)
那model是如何將這樣的條件機率做應用計算呢? 其實就是應用softmax來求出target word的機率
其中𝑔 為transformation function, 𝒉𝑗為Decoder
先前sequence 的hidden-state,然而我們在前一篇就有提到𝒉𝑗 在Seq2Seq
其實就是透過LSTM所求出來的,所以對應的轉換公式如下
其中的𝑓 可以用其他RNN相關model做替換,ex. LSTM, GRU等等, 𝒉𝑗−1就是Decoder
前一個target hidden-state; 𝑠 為source的context vector,經由這兩個輸入來最後求出Decoder
當前的hidden-state。
作者是採用Stack LSTM
的架構來加以探討
Attention based model
後來有Attention
的產生就是為了要解決在Decoder的時候並不需要把Encoder
的source sequecne 都有相同的權重做計算,而是去將一些認為對應重要的部分做留意以減去不必要的資訊,同時也可以加強處理長句子的問題。
而作者在這裡提出了兩種Attention
的做法,分別是Global
和Local
,簡單來說一個是考量Encoder
全部source的hidden-state,一個是考量局部的hidden-state,而這邊都是採用Encoder的hidden-state來作為input,進而求出context-vector,在與Decoder
的hidden-state一併求出attentional hidden-state
,公式呈現如下:
接著在套入到softmax來求出target word的機率公式就會變成如下:
就可以求出將attention weight
與context vector
,以及decoder的hidden-state
作為target word的輸出依據。
Global Attention
Global
的做法其實就是單純把所有Encoder
的hidden-state全部
考量進來,來進一步產生context-vector,作者呈現的架構如圖:
從這個架構可以看出,利用Decoder
的 target hidden state(ℎ𝑡) 與 Encoder
的 source hidden state (hs) 做比較,得到 variable-length alignment vector(𝑎𝑡),其中 at 的長度等於 source 的sequence長度,對應的計算公式如下:
這邊作者所提到的alignment vector(𝑎𝑡),我們可以視為之前所講到的attention score
,用來表示target hidden-state與source hidden-state之間的關係程度,最後再經用softmax來轉成機率。
然而作者有提出對於attention score
有三種算法
其中𝒗𝑎 和 𝑊𝑎 都是可訓練的。
當然dot
的計算方式效能較低,反而到concat
的時候因為要額外訓練兩個參數,所以計算成本就會更高,但其帶來的精準度與效果也會來得更佳。
所以在這樣的方法下,作者採用的source hidden-state是LSTM top-layer
,並且其中計算的路徑是 ℎ𝑡 → 𝑎𝑡 → 𝑐𝑡 → ℎ̃𝑡。
1. 求出『Decoder』的target hidden-state: ℎ𝑡
2. 接著與『Encoder』的source hidden-state (𝒉𝑠) 一同透過softmax來求得attention score(𝑎𝑡)
3. 接著求出`Encoder`的context-vector (𝑐𝑡)
4. 最後求出attention hidden state
然而,額外補充一下,這與前一篇Bahdanau這位作者所提出的attention有什麼差別了,如果讀者可以再去翻一下我前一篇介紹attention的文章可以從架構發現,Bahdanau他認為當前所要預測的字應該要與前一個字
有所關聯,因此會發現原本的attention使採用前一個y與前一個hidden-state拿來作為當前的y預測基準;但在Global Attention
我們會發現他是那當前的hidden-state來與context-vector來求出新的目前hidden-state,最後在預測y;原因在於這篇的作者認為在Decoder
的機制當中,本來就加入前一個hidden-state來求出當前的hidden-state,因此就不需要在預測的時候還要再加入前一個hidden-state了。‘
理解完後Global Attention
,我們思考一下他會有哪些缺點:
1. 每次在Decoder預測target word的時候,都需要完整全部的source hidden-state。
2. 計算成本太高,也無法適用長句子。
所以為了解決這樣的缺點,作者再提出了另外一個作法,就是Local Attention
。
Local Attention
在Local Attention
我們可以想成每次計算時,我們先決定好一個點(位置𝑝𝑡),這裡叫做alignment position
,接著額外設定一個參數(window-size),再由這個位置𝑝𝑡加減window-size的這塊區間,就是在計算attention時所需要考量的source 區間。
所以在這樣的情況下,coctext vector只會考量[𝑝𝑡-D, 𝑝𝑡+D]這段區間,所以公式就會被侷限成這樣
那alignment position
是如何決定出來的呢? 作者提出了兩個方法
Monotonic alignment(local-m)
最簡單就是以target word的 time step(𝑡),來作為position的選擇,也就是『𝑝𝑡=𝑡』。Predictive alignment(local-p)
這個方式就是利用『neural network』來做預測,公式如下
𝑆 是 source sentence 長度,𝑣𝑝、𝑊𝑝 是訓練參數
sigmoid 的求出來的值會在 [0,1],因此 𝑝𝑡∈[0,𝑆]
然而作者也提到了在alignment vector
求法也有不同:
𝜎=𝐷/2, 𝒉𝑠 是 ℎ[𝑝𝑡−𝐷,𝑝𝑡+𝐷] (一個有限區間),其中額外加入的高斯分佈,加入高斯分佈有什麼好處呢?就是要讓𝑝𝑡點成為peak,也就是要能可以去訓練𝑣𝑝、𝑊𝑝,因為本身是互不關聯的,所以須透過該方式做到訓練以及BP。
然而Local Attention
也存在著幾個問題
1. 如果是在短句子的話,其實與Global attention計算的效能是差不多的
2. 如果在window-size大於句子長度時,作者是直接做消除的動作。
Input-feeding Approach
簡單來說,就是用一個額外的vector,來記住哪些詞是已經翻譯過的,即考慮了coverage的問題。同時也不會造成資訊遺漏。
從上圖可以看出,把Decoder前一個timestampl 的 attention「後」的hidden-state和前一timestamp預測的輸出單詞的embedding連線起來,作為下一時刻的輸入。
paper conclusion
作者後來也有比較在long sentence的performance,也證實在長句子也能得到好的效果,實驗圖如下:
然後在attention model的選擇,作者也有列出表格來做比較:
general score 是 Local attention
最好,而dot score是在Global attention
最好,然而在選的alignment position採用Predictive alignment
效果最好。
這篇paper提到了Global
和Local
的比較與差異,並且也細節提出關於在計算attention的路徑,還有每個方式所對應的解決方案,最後也提出了input-feed的方式來記住哪些資訓以處理過,甚至避免資訊遺失。
後來也有更多學者提出更多的分類,但若從我前一篇寫的Seq2Seq
延伸到這篇paper,相信可以對Attention model
有再更深一點的認知,接下來要再更往下探討後來針對Attention
的後續的變化與細項分類。
二、An Attentive Survey of Attention Models
Attention Mechanism
在被提出之後,除了在NLP
的應用與研究之外,在其他領域也都被採用且都獲得了不錯的效果。本篇論文主要探討Attention Mechanism
如何提高model本身的解釋性,也提出了一些對於Attention Mechanism
有影響的應用,簡單來說就是針對Attention Model
做了全面性的探討。
我們都知道注意力如同人類的思維方式,在對於一件事物當中我們會留意那些對於我們來說覺得重要的資訊,且過濾掉其中不重要的訊息。在AI領域也是同樣的道理,以電腦視覺
為例,可以專注在圖片的某特定一塊去做聚焦就可以進而盡可能得到整體的資訊;在機器翻譯
中,只有特定幾個輸入的word會影響到當前要輸出的word。所以簡單來說Attention Model
就是一種允許model可以特定關注在某部分的特徵,從中獲取關聯。在論文當中作者提了Yelp的評論做如下例子做說明:
進而發現到第一句的『deliciouse』與第三句的『amazing』相較於其他詞為對於整體評論的情緒(原先的標記)更能帶來更大的意義與關聯。
作者也在這篇論文當中提到了為何現在AttentionModel快速發展的原因,其中包含了3個:
1. 可用在多個先進的model,ex.機器翻譯、問答系統、情緒分析、語音標記等
2. 可提升模型本身的可解釋性
3. 可克服RNN所遇到的問題,ex.輸入長度增加時所遇到的問題
Traditional Seq2Seq 問題
這邊作者再介紹Attention model
的一開始呈現了一張圖,如下:
左邊是圖(a)是傳統的Seq2Seq
,可以看到Encoder
會直接在每次輸入的x所產生對應的hidden-state,而Decoder
直接把最後的hidden-state來作為單一輸入進而生成y值。這樣會有2個問題
,第一就是該模型會將Encoder
壓縮成固定長度的vector(ht),所以對於更長的句子時仍有資訊遺失的可能;第二,就是Decoder
對於input sequecne都是一視同仁,他無法特定選擇部分的有關的word來作為當前要輸出的參考。
但有圖(b)就不一樣了喔,是attention model
每一個輸入x對應的hidden-state會經過一個attention score的計算
,其會將每一個輸入之hidden-state計算對應的weight(α)來讓Decoder
知道他應該多偏向哪一個hidden-state多一點來作為當前輸出的依據,這就是attention
。關於attention weight計算,這篇複習一下公式:
當求出每一個輸入之hidden-state的attention score(aij)之後,接著會做一個權重和,來使Decoder關注到對應的輸入位置。
關於learning attention weight
是透過FFN來學習的,是由兩個input,分別是Encoder的hidden-state,跟Decoder前一個狀態的state來做權重計算,而這樣的學習是在Decoder一同聯合訓練。
Further, this feed for- ward network is jointly trained with encoder-decoder compo- nents of the architecture.
Taxonomy of Attention
作者在這篇paper將attention分成四個觀點
,呈現如下:
而這4個類別彼此互不衝突,是可以混搭應用的,作者也列出了這四個觀點去初步分類一些關於Attention model的paper,如下:
這邊先來個前期提要一下,在attention機制當中,都是會牽扯到3個值有關,分別Query(q), Key(k) 和 Value(v), 透過q,k來計算attention-score,再經由softmax來做normalization,最後乘上v來取權重和。
Query: 在先前的說明 對照到 Decoder的hidden-state
Value: 在先前的說明 對照到 Encoder的hidden-state
Key: 就是attention weight
想必讀著們看這裡一定茫了吧。到底這四個觀點分別代表什麼意思,接下來帶大家來好好探討一下。
Number of Sequences
這裏初步細分成distinctive
, co-attention
, self
distinctive
這個分類就是以往我們一直描述的例子,attention的Q和V來自不同的地方,分別是Decoder, Encoder的 sequence之hidden-state。
所以簡單來說,如果attention的計算牽扯到兩個sequence,就可視為Distinctive
,常應用於Machine Translation
(Bahdanau et al., 2014),speech recognization
(Chan et al., 2016),image captioning
(Xu et al., 2015)等co-attention
co-attention
可以視為強化版的distinctive
,簡單來說光兩個sequence來做attention訓練不夠,我要用多個
sequencex來找到attention。
像是visual question an- swering(Lu et al., 2016),就是先針對文字、圖片來作為attention的訓練,進而從中獲取更多資訊。self
這個類別就是應用長輸入為Sequence
,輸出非Sequence
的情境,這時候就是拿當下的word來與同樣所屬的句子
之其他word來做attenion計算,這邊拿bert的self-attention圖來示意。
Number of Abstraction Levels
single-level
這是最普遍的案例,就是attention在輸入的sequence做計算。multi-level
這種類別最典型的範例是HAM(Hierarchical Attention Model)
(Yang et al., 2016),他在文章分類問題建構了兩層encoder,原因在於他認為文章
是由句子
所組成,其中句子對於文章的重要性有些很高有些很低,比如說有一邊關於政治的文章,照理說含有總統、立委等的句子應該就要與這個文章的類別所有關聯。此外,而句子
則是從word
所組成,也是同理可證。
在這樣的題目當中,可以快速歸納出『a.哪些word對於句子是重要的』; 『b.哪些句子是對文章重要的,藉此以助於做文章分類。』
因此該Yang作者等人就個別建構了句子的encoder和word的encoder,其中中間夾了attention做聯合訓練,其架構如下圖:
透過中間的attention layer就可以將word sequence context vector
與sentence sequence context vecotr
來計算出彼此的關聯程度,最後再透過sentence sequence context vecotr
來求出與document
的關聯程度以作為分類之方法,結果為呈現如下。
我們就可以看到對於句子
而言,哪些word
是重要的,而對於整體文章
而言,哪些句子
是重要的,進而做到分類問題。更詳細的演算過程會在未來寫一篇來探討,這邊先快速讓大家理解概念,以及何謂multi-level
。
Number of Positions
這個類別意指在計算attention的時候,其要關注的input 位置的不同,會有對應的計算方法
soft
soft attention
簡單來說就是拿全部
input sequence的hidden-state來做計算求出attention-weight,好處是其都有考量到每一個input sequence的token,Gradient
計算也較方便,但缺點就是正因為全部都要考量進來,所以整體計算效能較大。hard
hard attention
就是soft attention
的對立面,有全局就會有分區,hard attention
即透過隨機來選擇input sequence部分的hidden state來做計算,好處是可以減少計算量,但缺點就是計算的Gradient
無法微分,必須要透過其他方式來做輔助,例如蒙地卡羅演算法。global
global attention
其實與soft attention
沒有太大差異,幾乎是相同概念,在過往唯一的差別應該只是network選擇的不同而已。local
local attention
則是從input sequence決定一個位置,接著設定window-size
來產生local的soft attention
,如此一來就可以計算Gradient
,這也是和hard attention
不一樣的點。
Number of Representations
multi-representational
這個概念其實很簡單,在一些應用上可能單一個representation不足以表達出input的資訊,必須透過其他representation來加以表示。
舉例來說今天有一個圖片做輸入,可以從顏色、角度、尺寸等各種角度來產生representation,最後在做attention權重和。
或是在Dynamic meta-embeddings for improved sentence representations(Kiela et al., 2018)這篇paper,作者就是用不同的word embedding來表達同樣的句子,來計算權重和multi-dimensional
就是將embedding投影到個別不同dimension來做計算,就可透過不同的dimension來找出這中間的關係。
Network Architectures with Attention
接下來這個部分介紹到除了attention分類之外,通常attention應用到何種neural network上,作者提出了三種:
Encoder-Decoder
這個架構想必各位讀者已經有相當程度的熟悉了,因為attention本來就是從Encoder-Decoder
架構所帶出來的,那再後來有學者將這兩個部分拆開來做attention,最典型就是圖片轉文字
,Encoder改成CNN,Decoder仍使用RNN來做產出。
Memory Network
這個比較常用在chatbot, question-answer情境上,因為透過記住問答來往的過程資料,將其儲存到knowledge DB,利用attention來建立關聯模型(利用query來與資料計算),而這樣的情境就會是非常大量的sequence的計算。
Network without RNN
我們都知道RNN有一個問題,就是在計算過程無法做到parallelized
,所以導致在序列處理上效能仍然很差,所以後來就有學者提出了額外的作法,分別如下:
position-wise FNN
簡單來說,就是利用其他方式來替代RNN的作法,原先RNN是拿順序來做input,其中每個時間點的token其會自己處理。但為了做到parallelized
,position-wise FNN,就是用一般的FNN,但是額外加入position encoding,藉此紀錄每個token位置與先後順序關係。Multi-head self-attention
透過self-attention來與同樣句子的其他word做關聯程度計算,接著透過multi-head投影到不同的維度,如此一來既可以促使計算達到parallelized
,也能提高訓練的performance。但就是計算量變得更大了,然後也有sequence length fix的問題。
paper conclusion
整篇對我來說,其實針對Attention model
做了更深的探討,包含了作者將Attention
做了分類,以及同時提到許多其他學者用了該方法做了哪些應用,包含了可解釋性、效能等等。非常推薦這篇,讀完彷彿對於Attention model
有了更深的理解,也更清楚現代的一些model若採用該方法,可以更快地切入重點。